/** 判断数组是否包含某个元素一般用 Array.indexOf 或者 Array.includes
 * 区别 Array.indexOf无法判断NaN
 *
 * */

// ----- es7------
// const arr = [1,2,3,NaN]
// const result = arr.indexOf(1) !== -1
// const result = arr.indexOf(4) !== -1
// const result = arr.indexOf(NaN) !== -1 //false
// const result = arr.includes(NaN) //true
// const result = 3 ** 3
//es5
//const result = Math.pow(3,3)
// console.log(result)


//--------es8----
// const obj = {
//   a: 1,
//   b: 2,
//   c: 3,
// }
//
// const values = Object.values(obj)
// console.log(values)
// const str = 'abc'
// const values = Object.values(str)
// console.log(values) //[ 'a', 'b', 'c' ]
//es5
// const keys = Object.keys(obj)
// console.log(keys)


// const entries = Object.entries(obj)
// console.log(entries)//[ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
// const entries = Object.entries(str)
// console.log(entries)//[ [ '0', 'a' ], [ '1', 'b' ], [ '2', 'c' ] ]

// const result = str.padStart(10,'**')
// const result = str.padEnd(10,'**')
// console.log(result)

// ------ es10-----
// const list = [1, 2, 3, [4, 5]]
// const result = list.flat()
// console.log(result)
//flatMap是先map 在flat(1)

/**
 * Object.fromEntries 和Object.entries互为逆操作
 */
// const obj = {
//   a: 1,
//   b: 2,
//   c: 3
// }
// const keyValueArr = Object.entries(obj)
// console.log(keyValueArr)
// const obj1 = Object.fromEntries(keyValueArr)
// console.log(obj1)
//trimStart trimEnd

//--------es11
// const n = 10n
// console.log(n)
// console.log(Number.MAX_SAFE_INTEGER)
//空值合并运算符 可选链  ?? ?.
//globalThis //统一node环境和浏览器环境  windows global
// dynamic import es module

//------------es12--------

// let obj = {
//   a: 1,
//   b: 2,
//   c: 3,
// }
//
// const finalRegister = new FinalizationRegistry(() => {
//   console.log('something is clean')
// })
// finalRegister.register(obj,'hha')
// obj = null
// WeakRef

// let info = {a:1}
// const obj = info //强引用 得obj置为null info才会被回收
// const obj = new WeakRef(info) obj.deref()注意不要这样写 const xx = obj.deref()这样又有强引用了
// info = null

//逻辑赋值运算符 ||= ??=  &&=
//
// function foo(params) {
//   params ||= 'logic'
//   console.log(params)
// }
//
// foo()//logic
// foo(1)//1
// const str = 'a123a'
// const newStr = str.replaceAll('a','b')
// console.log(newStr)

//------es13-----
//数组和字符串 .at()

// const obj = {
//   a:1
// }
//es5
// const result = obj.hasOwnProperty('a')
// console.log(result)

/**
 * hasOwnProperty弊端:
 *    1.对象如果有obj.hasOwnProperty方法
 *    2:Object.create(null) 创建出来的对象没有原型使用hasOwnProperty报错
 */
// const result = Object.hasOwn(obj,'a')
// console.log(result)


class Person {
  /* public instance field
  *  实例属性
  *  */
  height = 180
  #private = 'xx'

  /**
   *  类属性
   * */

  static total = 100
  static #info = {}

  //静态代码块
  static {
    // 初始化操作
  }

  constructor(name) {
    this.name = name
  }
}